package com.hsurosy.trigger.job;

import com.hsurosy.domain.activity.model.valobj.ActivitySkuStockKeyVO;
import com.hsurosy.domain.activity.service.IRaffleActivitySkuStockService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * @Author Hsu琛君珩
 * @Date 2024-11-09 20:14
 * @Description 更新活动sku库存任务
 * @Version: v1.0.0
 */
@Slf4j
@Component()
public class UpdateActivitySkuStockJob {

    @Resource
    private IRaffleActivitySkuStockService skuStock; // 活动 SKU 库存服务接口

    /**
     * 每5秒执行一次的定时任务，更新活动 SKU 库存
     */
    @Scheduled(cron = "0/5 * * * * ?")
    public void exec() {
        try {
            // 从延迟队列中获取需要更新库存的 SKU 信息
            ActivitySkuStockKeyVO activitySkuStockKeyVO = skuStock.takeQueueValue();
            if (null == activitySkuStockKeyVO) {
                // 如果没有需要更新的 SKU 信息，则直接返回
                return;
            }
            log.info("定时任务，更新活动sku库存 sku: {} activityId: {}", activitySkuStockKeyVO.getSku(), activitySkuStockKeyVO.getActivityId());
            // 调用更新库存的方法，更新数据库中的 SKU 库存
            skuStock.updateActivitySkuStock(activitySkuStockKeyVO.getSku());
        } catch (Exception e) {
            // 捕获异常并记录日志，确保即使任务失败也不会影响其他任务的执行
            log.error("定时任务，更新活动sku库存失败", e);
        }
    }

}
